import { utils } from 'cloudpivot/common';

import { format } from 'cloudpivot-form/form/utils/number-formatter';

import { NumberFormatType } from 'cloudpivot-form/form/src/common/component-schema/form-control-options';

import { FormControlType } from 'cloudpivot-form/form/src/schema/form-control-type';

import printSharedMethods from 'cloudpivot-list/list/src/components/pc/scripts/printSharedMethods';

/**
 * 表单打印数据处理扩展
 * 注：
 *    1、此处的处理逻辑将在系统默认处理逻辑之后执行，可对系统默认处理结果进行二次处理
 *    2、子表子数据项处理并不会单独调用，仅在对子表数据项整体进行处理时调用
 *    3、无需二次处理的数据，可不做任何返回，或返回null值，系统将直接使用默认处理结果
 */
class FormDataHandleExtension {
  /**
   * 全局默认的表单打印数据处理扩展
   * @param vm            当前所处实例对象：表单或视图列表
   * @param printData     打印字段数据：经过系统默认逻辑处理后的当前字段打印数据
   * @param sourceData    原始字段数据：未经处理的当前字段数据
   * @param formValues    原始表单数据：未经处理的表单全部字段数据
   * @param key           当前字段的key
   * @param locale        当前语言类型，zh（中文），en（英文），可选，默认为zh
   * @param control       当前字段的控制器，可选，系统字段无控制器传入
   * @param dataType      当前字段的数据类型，可选，系统字段无数据类型传入
   * @param sheetData     当前字段所需的子表数据，可选，系统字段无数据传入
   */
  defaultHandle(
    vm: any,
    printData: any,
    sourceData: any,
    formValues: any,
    key: string,
    locale: string,
    control?: any,
    dataType?: number,
    sheetData?: any,
  ) {
    // 以下为示例代码，可根据实际需求进行修改
    // console.log(vm, printData, sourceData, formValues, key, locale, control, dataType, sheetData, 'defaultHandle');
    // // 1、根据字段控制器类型（表单中未配置的系统字段无控制器类型传入）对表单中的字段数据进行统一处理
    // if(dataType === FormControlType.Date) {
    //   return sourceData ? utils.DateHandle.dateFormat(
    //     new Date(sourceData),
    //     'YYYY年MM月DD日',
    //   ) : ''
    // }
    // if(dataType === FormControlType.Logic) {
    //   if(locale === 'zh') {
    //     return sourceData ? '是' : '否';
    //   } else {
    //     return sourceData ? 'Yes' : 'No';
    //   }
    // }
    // // 2、根据字段key对表单中的字段数据进行针对处理
    // if (key === 'Number1698741607025') {
    //   return sourceData ? format(NumberFormatType.Decimal, sourceData) : '';
    // }
    // if (key === 'createdTime' || key === 'modifiedTime') {
    //   if(locale === 'zh') {
    //     return sourceData ? utils.DateHandle.dateFormatApm(
    //         new Date(sourceData.replace(/-/g, '/')),
    //         'YYYY-MM-DD CN-APM HH:mm',
    //       )
    //     : '';
    //   } else {
    //     return sourceData ? utils.DateHandle.dateFormatApm(
    //         new Date(sourceData.replace(/-/g, '/')),
    //         'YYYY-MM-DD EN-APM HH:mm',
    //       )
    //     : '';
    //   }
    // }
    // // 3、子表子数据项处理
    // if (key === 'Sheet1698741621218') {
    //   return sourceData ? sourceData.map((item) => {
    //     const Date1698741624457_value = item['Date1698741624457'] ? utils.DateHandle.dateFormat(
    //       new Date(item['Date1698741624457'].replace(/-/g, '/')),
    //       'YYYY年MM月',
    //     ) : '';
    //     const Number1698741624873_value = item['Number1698741624873'] ? format(NumberFormatType.CurrencyRMB, item['Number1698741624873']) : '';
    //     return Object.assign({}, item, {
    //       Date1698741624457: Date1698741624457_value,
    //       Number1698741624873: Number1698741624873_value,
    //     })
    //   }) : null;
    // }
  }

  /**
   * 示例：针对某个模型的表单打印数据处理扩展
   * 方法名称格式为：模型编码
   */
  // ['stbtsx_01'](
  //   vm: any,
  //   printData: any,
  //   sourceData: any,
  //   formValues: any,
  //   key: string,
  //   locale: string,
  //   control?: any,
  //   dataType?: number,
  //   sheetData?: any,
  // ) {}

  /**
   * 示例：针对具体打印模板的表单打印数据处理扩展
   * 方法名称格式为：模型编码_打印模板编码
   */
  // ['stbtsx_01_stbtsx_01_print'](
  //   vm: any,
  //   printData: any,
  //   sourceData: any,
  //   formValues: any,
  //   key: string,
  //   locale: string,
  //   control?: any,
  //   dataType?: number,
  //   sheetData?: any,
  // ) {}
}

export const formDataHandleExtension = new FormDataHandleExtension();
